/******************** (C) COPYRIGHT  源地工作室 ********************************
 * 文件名  ：main.c
 * 描述    :循环点亮LED灯
 * 库版本  ：V1.3.0
 * 作者    ：zhuoyingxingyu
 * 淘宝    ：源地工作室http://vcc-gnd.taobao.com/
 * 论坛地址：极客园地-嵌入式开发论坛http://vcc-gnd.com/
 * 版本更新: 2015-12-20
 * 调试方式：J-Link-OB
 修改记录：
 230513：屏幕旋转180度。
 230927：将sys_name中的" 400MHz"改为" 700MHz"。
**********************************************************************************/

#include <includes.h>
#include "stm32f0xx.h"
#include "stm32f0xx_iwdg.h"
#include "led.h"
#include "lcd.h"
#include "timer.h"
#include "usart.h"
#include "device.h"

extern INT8U DataBuf[BOARD_MAX];

extern INT8U BytesRcvDelay;
extern INT8U BytesRcvDelay_B;
extern INT8U flag_2ms;
INT16U delay_500ms_sys;
INT8U led_state;

extern INT16U gain_up;
extern INT16U gain_dn;

extern INT8U key0_value;
extern INT8U key1_value;
extern INT8U key2_value;
extern INT8U dis_state;
extern INT8U DataSaveFlag;

INT16U data_temp[3] = {0x0103, 0x5550, 0x2320};
INT16U data_temp2[3];

void IWDG_ConfigAndStart(uint8_t prescaler, uint16_t reload)
{
    /* 0. 使能 LSI 振荡器，并等待就绪 */
    RCC_LSICmd(ENABLE);
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

    /* 1. 使能对 IWDG 寄存器的写访问 */
    IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);

    /* 2. 设置分频器 */
    IWDG_SetPrescaler(prescaler);

    /* 3. 设置重装载寄存器 */
    IWDG_SetReload(reload);

    /* 4. 重装载计数器（“喂狗”一次） */
    IWDG_ReloadCounter();

    /* 5. 启动看门狗 */
    IWDG_Enable();
}

static void IWDG_Feed(void)
{
    IWDG_ReloadCounter();
}

// 函数声明

// void Delay_ms( uint16_t time_ms );
/**
 * @file   main
 * @brief  Main program.
 * @param  None
 * @retval None
 */
int main(void)
{
    /*初始化LED端口*/
    LED_GPIO_Config();
    // STMFLASH_Read(FLASH_SAVE_ADDR,(INT16U*)DataBuf,BOARD_MAX);
    // STMFLASH_Write(FLASH_SAVE_ADDR,data_temp,3);

    TIM2_Config();
    USART1_Config();
    USART2_Config();
    Serial_Init();
    Pc_Init();
    inid_device_info();
    IWDG_ConfigAndStart(IWDG_Prescaler_64, 1875);

    LCD_Init();  // 液晶初始化
    face_win_init();
    lcd_fresh_s();
    LEDBL_ONOFF(Bit_SET);

    while (1) {
        if (flag_2ms == 1) {
            flag_2ms = 0;

            if (dis_state >= 1) {
                face_win_refresh();
            }
            if (BytesRcvDelay)
                BytesRcvDelay--;
            if (BytesRcvDelay_B)
                BytesRcvDelay_B--;
            SerialRcvEvent();
            PcRcvEvent();

            key0_event();
            key1_event();
            key2_event();

            keyset_event();
            // led_display();
            trans_event();

            key0_value = 0;
            key1_value = 0;
            key2_value = 0;

            if (++delay_500ms_sys >= 125) {
                delay_500ms_sys = 0;
                if (dis_state == 2) {
                    set_comp_refresh();
                }

                if (led_state == 0) {
                    led_state = 1;
                    //					GPIO_WriteBit(LED_SYS_GPIO_PORT,LED_SYS_GPIO_PIN,1);
                    //					GPIO_WriteBit(LED_ALM_GPIO_PORT,LED_ALM_GPIO_PIN,0);
                }
                else {
                    led_state = 0;
                    //					GPIO_WriteBit(LED_SYS_GPIO_PORT,LED_SYS_GPIO_PIN,0);
                    //					GPIO_WriteBit(LED_ALM_GPIO_PORT,LED_ALM_GPIO_PIN,1);
                }
            }
            IWDG_Feed();
        }
    }
}

/**
 * @file   Delay_ms
 * @brief  毫秒延时time_ms ms
 * @param   time_ms 延时时间
 * @retval 无
 */
void Delay_ms(uint16_t time_ms)
{
    uint16_t i, j;
    for (i = 0; i < time_ms; i++) {
        for (j = 0; j < 4784; j++);
    }
}
